# 定义源文件
SRCS = main.cpp xmlop.cpp tinyxml2.cpp pugixml.cpp

.PHONY:all clean

# 定义编译选项，带入宏定义
# CFLAGS = -g -Wall
CXXFLAGS = -g -Wall

# ifeq ($(TYPE), tiny)
# 	SRCS += tinyxml2.cpp
# else
# 	TYPE = pugi
# 	# CXXFLAGS += -D_PUGIXML
# 	SRCS += pugixml.cpp
# endif

# 定义对象文件目录和可执行文件目录
SDK_ROOT=$(shell pwd)
BUILD_DIR=$(SDK_ROOT)/build
OBJ_DIR=$(BUILD_DIR)/$(TYPE)/obj
BIN_DIR=$(BUILD_DIR)/$(TYPE)/bin

# 自动推导对象文件列表
OBJS = $(patsubst %.cpp, $(OBJ_DIR)/%.o, $(notdir $(SRCS)))

# 定义目标可执行文件
TARGET = test_$(TYPE)

all:prepare bin

prepare:
	mkdir -p $(BUILD_DIR)
	mkdir -p $(BIN_DIR)
	mkdir -p $(OBJ_DIR)

# 定义目标和依赖关系
$(TARGET): $(OBJS)
	g++ $(CXXFLAGS) $^ -o $@

# 将可执行文件移动到bin目录
bin: $(TARGET)
	mkdir -p $(BIN_DIR)
	cp $(TARGET) $(BIN_DIR)


# 编译源文件到对象文件
$(OBJ_DIR)/%.o: %.cpp | $(OBJ_DIR)
	g++ $(CXXFLAGS) -c $< -o $@

# 创建对象文件目录
$(OBJ_DIR):
	mkdir -p $(OBJ_DIR)

# 清理目标文件和可执行文件
clean:
	rm -f $(TARGET)

# 深度清理，移除bin目录和所有生成的文件
distclean: clean
	rm -rf $(BUILD_DIR) $(TARGET)